<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Document</title>
    <script !src="">
      // 定义方式一
      //如果没有执行return，函数执行完也会返回结果，结果就是undefined
      function abs(x) {
        //手动抛出异常来判断参数是否存在
        // if (typeof x !== 'number') {
        //   throw 'Not a Number'; //Uncaught Not a Number
        // }

        //arguments \来规避不存在参数问题
        //arguments代表，传递进来的所有参数，是一个数组！
        console.log('x=>' + x);
        console.log('arguments.length:' + arguments.length);
        for (var i = 0; i < arguments.length; i++) {
          console.log('arguments:' + arguments[i]);
        }

        if (x >= 0) {
          return x;
        } else {
          return -x;
        }
      }

      //定义方式二function(x){…}这是一个匿名函数。但是可以吧结果赋值给abs，通过abs就可以调用函数！
      // 方式一和方式二等价！
      //参数问题：javaScript可以传任意个参数，也可以不传递参数~
      var abs2 = function (x) {
        if (x > 0) {
          return x;
        } else {
          return -x;
        }
      };

      function test() {}
      console.log('abs:' + abs(1, 2));
      console.log(abs2(-3));
      console.log(test()); //undefined
      console.log(test(123)); //undefined

      var abs = function (x) {
        console.log('x=>' + x);
        // 手动抛出异常来判断
        if (typeof x !== 'number') {
          throw 'Not a Number';
        }
        for (var i = 0; i < arguments.length; i++) {
          console.log(arguments[i]);
        }
        if (x >= 0) {
          return x;
        } else {
          return -x;
        }
      };

      let a = abs(1, 23, 21, 1232, 32312, 29);
      console.log('a:' + a);
      abs();
    </script>
  </head>
  <body></body>
</html>
